Hadoop Streaming এবং Hadoop Pipes হল হাদুপের দুটি শক্তিশালী উপাদান, যা ব্যবহারকারীদের বাইরের ভাষায় কোড লেখা এবং সেটি হাদুপের MapReduce ফেজের মধ্যে ব্যবহার করার সুযোগ দেয়। এই টুলসগুলির মাধ্যমে আপনি পাইথন, পার্ল, বা সি++-এর মতো ভাষাগুলিতে কোড লিখতে পারেন এবং সেগুলি হাদুপের মধ্যে সহজে একত্রিত করতে পারেন। তবে, ইনপুট এবং আউটপুট হ্যান্ডলিং হাদুপ স্ট্রিমিং এবং পাইপস ব্যবহার করার ক্ষেত্রে একটি গুরুত্বপূর্ণ দিক।
Hadoop Streaming
Hadoop Streaming হাদুপ ব্যবহারকারীদের বাইরের প্রোগ্রাম (যেমন পাইথন, পার্ল, শেল স্ক্রিপ্ট) ব্যবহার করে MapReduce প্রোগ্রামিং করার সুযোগ দেয়। এই স্ট্রিমিং প্রোগ্রামে ইনপুট এবং আউটপুটের জন্য স্ট্যান্ডার্ড স্ট্রিম (stdin, stdout) ব্যবহার করা হয়, যা খুব সহজে বাইরের ভাষার স্ক্রিপ্টের মাধ্যমে পরিচালনা করা যায়।
Streaming এর Input Handling
- Inbuilt Input Formats:
Hadoop Streaming-এ ইনপুট ডেটা TextInputFormat, KeyValueTextInputFormat ইত্যাদি ফরম্যাটে পড়া যায়। - Standard Input (stdin):
MapReduce প্রোগ্রামে ইনপুট প্রদান করতে হয় স্ট্যান্ডার্ড ইনপুট (stdin) এর মাধ্যমে।
উদাহরণস্বরূপ, Python স্ক্রিপ্টে এটি ব্যবহার করা হতে পারে:
import sys
for line in sys.stdin:
words = line.strip().split()
for word in words:
print(f"{word}\t1")
এই স্ক্রিপ্টটি stdin থেকে লাইনগুলো পড়ে এবং প্রতিটি শব্দকে কী-ভ্যালু পেয়ারে রূপান্তরিত করে আউটপুট প্রদান করবে।
Streaming এর Output Handling
- Standard Output (stdout):
Hadoop Streaming প্রোগ্রামে আউটপুট প্রদানের জন্য stdout ব্যবহার করা হয়। - আউটপুটটি সাধারণত কী-ভ্যালু পেয়ার আকারে তৈরি হয়। উদাহরণস্বরূপ, যদি
word13 বার আসলে আউটপুট হবে:
word1 3
Hadoop Streaming আউটপুটকে একটি ফাইলের মধ্যে বা HDFS-এ স্টোর করতে পারে।
Streaming-এর উদাহরণ
যখন আপনি Hadoop Streaming ব্যবহার করে একটি শব্দগণনা (Word Count) প্রোগ্রাম লিখতে চান, তখন আপনি একটি mapper.py এবং reducer.py স্ক্রিপ্ট তৈরি করবেন এবং তারপর হাদুপ স্ট্রিমিং কমান্ড দিয়ে প্রোগ্রামটি চালাবেন:
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \
-input /input/data \
-output /output/wordcount \
-mapper mapper.py \
-reducer reducer.py
এখানে, mapper.py ইনপুট পড়বে, এবং reducer.py ফলাফল প্রক্রিয়া করে আউটপুট তৈরি করবে।
Hadoop Pipes
Hadoop Pipes একটি C++ API যা ব্যবহারকারীদের MapReduce কাজগুলির জন্য C++ প্রোগ্রাম লিখতে দেয়। এটি স্ট্রিমিংয়ের মতো বাইরের ভাষায় প্রোগ্রামিং করতে সহায়ক, তবে এটি C++ ভিত্তিক ডেভেলপমেন্ট প্রদান করে। Hadoop Pipes ইনপুট এবং আউটপুট হ্যান্ডলিংয়ের জন্য কিছু নির্দিষ্ট নিয়ম অনুসরণ করে।
Pipes এর Input Handling
Hadoop Pipes ইনপুট ডেটাকে TextInputFormat বা KeyValueTextInputFormat থেকে নিতে পারে। ইনপুট ডেটা পাঠানোর সময় এটি স্ট্যান্ডার্ড ইনপুট (stdin) ব্যবহার করে। Pipes ব্যবহার করে C++ কোডে ইনপুট হ্যান্ডলিংয়ের জন্য MapContext ক্লাসের মাধ্যমে C++ কোডের মধ্যে ডেটা গ্রহণ করা হয়।
#include <iostream>
#include "pipes/Pipes.hh"
using namespace std;
void map(mapContext &context) {
string line;
while (context.read(line)) {
// ডেটা প্রসেস এবং আউটপুট লিখুন
context.write(line, 1);
}
}
এই কোডটি MapContext ব্যবহার করে stdin থেকে ডেটা পড়ে এবং তারপরে write() ফাংশন দ্বারা আউটপুট তৈরি করে।
Pipes এর Output Handling
Hadoop Pipes-এ আউটপুটের জন্য MapContext ক্লাসের write() মেথড ব্যবহার করা হয়, যা stdout তে ডেটা পাঠায়।
#include <iostream>
#include "pipes/Pipes.hh"
using namespace std;
void reduce(reduceContext &context) {
string key;
int value;
while (context.read(key, value)) {
// ফলাফল প্রক্রিয়া এবং আউটপুট
context.write(key, value);
}
}
এখানে, reduceContext ব্যবহার করে আউটপুট তৈরি হয় এবং stdout তে লেখা হয়।
Pipes এর উদাহরণ
C++ কোড ব্যবহার করে হাদুপ পাইপস প্রোগ্রাম চালানোর জন্য একটি কমান্ড লাইনে hadoop pipes ব্যবহার করতে হয়:
hadoop pipes -input /input/data -output /output/result -mapper map_program -reducer reduce_program
এখানে map_program এবং reduce_program C++ কোডের ফাইল নাম যা ম্যাপ এবং রিডিউস ফাংশন প্রক্রিয়া করবে।
Streaming এবং Pipes এর মধ্যে পার্থক্য
| ফিচার | Hadoop Streaming | Hadoop Pipes |
|---|---|---|
| ভাষা সমর্থন | পাইথন, পার্ল, শেল স্ক্রিপ্ট ইত্যাদি | C++ |
| ইনপুট এবং আউটপুট | stdin/stdout ব্যবহার | stdin/stdout এবং C++ API ব্যবহার |
| ব্যবহার সহজতা | সহজ, স্ক্রিপ্টিং ভাষায় লেখা যেতে পারে | C++ কোড লিখতে হয়, কিছুটা কঠিন |
| পারফরম্যান্স | সাধারণত ভালো, তবে বড় ডেটাসেটে কিছুটা ধীর হতে পারে | দ্রুত, তবে C++ অভিজ্ঞতার প্রয়োজন |
সারাংশ
Hadoop Streaming এবং Hadoop Pipes দুইটি শক্তিশালী টুল যা হাদুপে বাইরের প্রোগ্রামিং ভাষায় কোড লেখার সুযোগ দেয়। Streaming পাইথন, পার্ল, শেল স্ক্রিপ্টে কাজ করতে সক্ষম এবং Pipes C++-এ কাজ করে। উভয় টুলের জন্য ইনপুট এবং আউটপুট সাধারণত stdin এবং stdout দ্বারা হ্যান্ডেল করা হয়, তবে Pipes কিছুটা কাস্টম C++ API ব্যবহার করে। উভয় টুলই হাদুপ প্রোগ্রামিংকে আরও নমনীয় এবং শক্তিশালী করে তোলে।
Read more